Conditions | 1 |
Paths | 8 |
Total Lines | 268 |
Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | /** |
||
32 | egw.extend('calendar', egw.MODULE_WND_LOCAL, function(_app, _wnd) |
||
33 | { |
||
34 | // translate only once |
||
35 | var calendar_translated = false,timepicker_translated = false; |
||
36 | |||
37 | function calendarPreferences(_egw) |
||
38 | { |
||
39 | // Date format in jQuery UI date format |
||
40 | var dateformat = dateTimeFormat(_egw.preference("dateformat")); |
||
41 | |||
42 | // First day of the week |
||
43 | var first_day = {"Monday": 1, "Sunday": 0, "Saturday": 6}; |
||
44 | var first_day_pref = _egw.preference("weekdaystarts","calendar"); |
||
45 | |||
46 | return { |
||
47 | 'dateFormat': dateformat, |
||
48 | 'firstDay': first_day_pref ? first_day[first_day_pref] : 0 |
||
49 | }; |
||
50 | }; |
||
51 | |||
52 | /** |
||
53 | * transform PHP date/time-format to jQuery date/time-format |
||
54 | * |
||
55 | * @param {string} _php_format |
||
56 | * @returns {string} |
||
57 | */ |
||
58 | function dateTimeFormat(_php_format) |
||
59 | { |
||
60 | return _php_format |
||
61 | .replace("Y","yy") |
||
62 | .replace("d","dd") |
||
63 | .replace("m","mm") |
||
64 | .replace("M", "M") |
||
65 | .replace('H', 'hh') |
||
66 | .replace('i', 'mm') // datepicker uses mm for month and minutes, depending where in format it's written! |
||
67 | .replace('s', 'ss'); |
||
68 | } |
||
69 | |||
70 | function timePreferences(_egw) |
||
71 | { |
||
72 | return { |
||
73 | // timepicker does NOT work with spaces in timeformat |
||
74 | "timeFormat": egw.preference("timeformat") == 12 ? "h:mmtt" : "HH:mm", |
||
75 | "ampm": (egw.preference("timeformat") == "12"), |
||
76 | "hourGrid": 4, |
||
77 | "minuteGrid": 10 |
||
78 | }; |
||
79 | }; |
||
80 | |||
81 | function setupCalendar(_egw, _input, _time, _callback, _context) |
||
82 | { |
||
83 | if (!calendar_translated) |
||
84 | { |
||
85 | // Set template's icon for date popup - could probably use jquery-ui icons |
||
86 | _egw.css(".et2_date input.hasDatepicker:enabled:hover", "background-image: url(" + egw().image('datepopup') + ")"); |
||
87 | |||
88 | translateCalendar(); |
||
89 | calendar_translated = true; |
||
90 | } |
||
91 | if (!timepicker_translated) |
||
92 | { |
||
93 | translateTimepicker(); |
||
94 | timepicker_translated = true; |
||
95 | } |
||
96 | var prefs = calendarPreferences(_egw); |
||
97 | |||
98 | var params = { |
||
99 | dateFormat: prefs.dateFormat, |
||
100 | firstDay: prefs.firstDay, |
||
101 | |||
102 | autoSize: true, |
||
103 | showButtonPanel: true, // Today, Done buttons |
||
104 | showOtherMonths: true, |
||
105 | selectOtherMonths: true, |
||
106 | showWeek: true, // Week numbers |
||
107 | changeMonth: true, // Month selectbox |
||
108 | changeYear: true // Year selectbox |
||
109 | }; |
||
110 | |||
111 | // Get the preferences |
||
112 | if(_time) |
||
113 | { |
||
114 | params = jQuery.extend(params, timePreferences(_egw)); |
||
115 | _wnd.jQuery(_input).datetimepicker(params); |
||
116 | } |
||
117 | else |
||
118 | { |
||
119 | _wnd.jQuery(_input).datepicker(params); |
||
120 | } |
||
121 | /* |
||
122 | onClose: function(date_text, picker) { |
||
123 | // Only update if there's a change - "" if no date selected |
||
124 | if(date_text != "") self.set_value(new Date( |
||
125 | picker.selectedYear, |
||
126 | picker.selectedMonth, |
||
127 | picker.selectedDay, |
||
128 | self.input_hours ? self.input_hours.val() : 0, |
||
129 | self.input_minutes ? self.input_minutes.val() : 0, |
||
130 | 0,0 |
||
131 | )); |
||
132 | }, |
||
133 | }); |
||
134 | |||
135 | */ |
||
136 | }; |
||
137 | |||
138 | /** |
||
139 | * Set up an input to have a time selection popup |
||
140 | * |
||
141 | * @param {egw} _egw egw object to use |
||
142 | * @param {(node|string)} _input input field to use |
||
143 | */ |
||
144 | function setupTime(_egw, _input) |
||
145 | { |
||
146 | if (!timepicker_translated) |
||
147 | { |
||
148 | translateTimepicker(); |
||
149 | timepicker_translated = true; |
||
150 | } |
||
151 | _wnd.jQuery(_input).timepicker(timePreferences(_egw)); |
||
152 | } |
||
153 | |||
154 | /** |
||
155 | * Translate, and set as default values |
||
156 | * |
||
157 | */ |
||
158 | function translateCalendar() |
||
159 | { |
||
160 | var translate_fields = { |
||
161 | // These ones are simple strings |
||
162 | "nextText": false, |
||
163 | "currentText": false, |
||
164 | "prevText": false, |
||
165 | "closeText": false, |
||
166 | |||
167 | // These ones are arrays. |
||
168 | // Integers are length. If lang() has no short translation, just trim full |
||
169 | "dayNames": false, |
||
170 | "dayNamesShort":3, |
||
171 | "dayNamesMin": 2, |
||
172 | "monthNames": false, |
||
173 | "monthNamesShort": 3 |
||
174 | }; |
||
175 | var regional = {}; |
||
176 | var full = []; |
||
177 | for(var i in translate_fields) |
||
178 | { |
||
179 | var trans = _wnd.jQuery.datepicker._defaults[i]; |
||
180 | if(typeof trans === 'string') |
||
181 | { |
||
182 | trans = egw().lang(trans); |
||
183 | } |
||
184 | else |
||
185 | { |
||
186 | for(var key in trans) { |
||
187 | if(translate_fields[i] === false) |
||
188 | { |
||
189 | trans[key] = egw().lang(trans[key]); |
||
190 | } |
||
191 | else |
||
192 | { |
||
193 | if (key != 'indexOf') trans[key] = full[key].substr(0,translate_fields[i]); |
||
194 | } |
||
195 | } |
||
196 | // Keep the full one for missing short ones |
||
197 | if(translate_fields[i] === false) full = trans; |
||
198 | } |
||
199 | regional[i] = trans; |
||
200 | } |
||
201 | |||
202 | // Set some non-lang defaults too |
||
203 | /* |
||
204 | var prefs = calendarPreferences(egw()); |
||
205 | for(var i in prefs) |
||
206 | { |
||
207 | regional[i] = prefs[i]; |
||
208 | } |
||
209 | */ |
||
210 | |||
211 | _wnd.jQuery.datepicker.setDefaults(regional); |
||
212 | }; |
||
213 | |||
214 | function translateTimepicker() |
||
215 | { |
||
216 | var translate_fields = { |
||
217 | // These ones are simple strings |
||
218 | "timeOnlyTitle": false, |
||
219 | "timeText": false, |
||
220 | "hourText": false, |
||
221 | "minuteText": false, |
||
222 | "currentText": false, |
||
223 | "closeText": false |
||
224 | }; |
||
225 | var regional = {}; |
||
226 | for(var i in translate_fields) |
||
227 | { |
||
228 | var trans = _wnd.jQuery.timepicker._defaults[i]; |
||
229 | if(typeof trans === 'string') |
||
230 | { |
||
231 | trans = egw().lang(trans); |
||
232 | } |
||
233 | regional[i] = trans; |
||
234 | } |
||
235 | _wnd.jQuery.timepicker.setDefaults(regional); |
||
236 | }; |
||
237 | |||
238 | return { |
||
239 | /** |
||
240 | * setup a calendar / date-selection |
||
241 | * |
||
242 | * @member of egw |
||
243 | * @param _input |
||
244 | * @param _time |
||
245 | * @param _callback |
||
246 | * @param _context |
||
247 | * @returns |
||
248 | */ |
||
249 | calendar: function(_input, _time, _callback, _context) |
||
250 | { |
||
251 | setupCalendar(this, _input, _time, _callback, _context); |
||
252 | }, |
||
253 | /** |
||
254 | * setup a time-selection |
||
255 | * |
||
256 | * @param _input |
||
257 | * @param _callback |
||
258 | * @param _context |
||
259 | * @returns |
||
260 | */ |
||
261 | time: function(_input, _callback, _context) |
||
262 | { |
||
263 | setupTime(this, _input, _callback, _context); |
||
|
|||
264 | }, |
||
265 | /** |
||
266 | * transform PHP date/time-format to jQuery date/time-format |
||
267 | * |
||
268 | * @param {string} _php_format |
||
269 | * @returns {string} |
||
270 | */ |
||
271 | dateTimeFormat: function(_php_format) |
||
272 | { |
||
273 | return dateTimeFormat(_php_format); |
||
274 | }, |
||
275 | |||
276 | /** |
||
277 | * Calculate the start of the week, according to user's preference |
||
278 | */ |
||
279 | week_start: function(date) { |
||
280 | var d = new Date(date); |
||
281 | var day = d.getUTCDay(); |
||
282 | var diff = 0; |
||
283 | switch(egw.preference('weekdaystarts','calendar')) |
||
284 | { |
||
285 | case 'Saturday': |
||
286 | diff = day === 6 ? 0 : day === 0 ? -1 : -(day + 1); |
||
287 | break; |
||
288 | case 'Monday': |
||
289 | diff = day === 0 ? -6 : 1-day; |
||
290 | break; |
||
291 | case 'Sunday': |
||
292 | default: |
||
293 | diff = -day; |
||
294 | } |
||
295 | d.setUTCDate(d.getUTCDate() + diff); |
||
296 | return d; |
||
297 | } |
||
298 | }; |
||
299 | }); |
||
300 |